home *** CD-ROM | disk | FTP | other *** search
- From: Ryan Thompson Read: Yes Replied: No
-
- { I have an Integer to hex in pascal with ASM: }
-
- Function HexOf(I : Longint) : String; Assembler;
- Asm
- jmp @1 { Skip table }
- @0:
- db '0123456789ABCDEF'
- @1:
- cld { Clear direction flag }
- les di,@Result { ES:DI = Function return data }
- mov ax,$0008 { Set String size }
- stosb { in the output, }
- mov cx,4 { Loop 4x for four bytes }
- mov si,3
- @2:
- mov al,byte [I+si] { Load AL with next byte }
- dec si
- push si { SAVE index register! }
- mov bl,al { Load DL... }
- mov dl,bl { and BL, }
- and bx,$00F0 { prepare and ... }
- {$IFOPT G+}
- shr bx,4
- {$ELSE}
- shr bx,1 { convert BL to high nybble only, }
- shr bx,1
- shr bx,1 { 8088-compatible }
- shr bx,1
- {$ENDIF}
- and dx,$000F { and DL to low nybble only. }
- mov si,bx { move high nybble into index, }
- mov al,byte [cs:@0+si] { read Character for that nybble, }
- stosb { Write high nybble }
- mov si,dx { move low nybble into index, }
- mov al,byte [cs:@0+si] { read Character for that nybble, }
- stosb { Write low nybble }
- pop si { RESTORE index register! }
- loop @2 { Dec CX; Loop if CX <> 0 }
- End;
-
- {
- It's not wonderfully written code, but it does work. Spits out an 8-digit
- hex string from a longint. You could either delete the unneeded parts of the
- string or make a version that doesn't do all four bytes.
- }